home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 001 / pibt3sp3.arc / REVIEWCA.PAS < prev   
Pascal/Delphi Source File  |  1985-08-14  |  10KB  |  275 lines

  1. (*----------------------------------------------------------------------*)
  2. (*        Review_Captured_Text --- display internal capture buffer      *)
  3. (*----------------------------------------------------------------------*)
  4.  
  5. OVERLAY PROCEDURE Review_Captured_Text;
  6.  
  7. (*----------------------------------------------------------------------*)
  8. (*                                                                      *)
  9. (*     Procedure:  Review_Captured_Text                                 *)
  10. (*                                                                      *)
  11. (*     Purpose:    Displays contents of internal capture buffer of      *)
  12. (*                 last Max_Review_Length lines received from           *)
  13. (*                 communications port                                  *)
  14. (*                                                                      *)
  15. (*     Calling Sequence:                                                *)
  16. (*                                                                      *)
  17. (*        Review_Captured_Text;                                         *)
  18. (*                                                                      *)
  19. (*     Calls:                                                           *)
  20. (*                                                                      *)
  21. (*        Save_Screen                                                   *)
  22. (*        Restore_Screen                                                *)
  23. (*        Update_Lines_Displayed                                        *)
  24. (*        Reset_Global_Colors                                           *)
  25. (*                                                                      *)
  26. (*----------------------------------------------------------------------*)
  27.  
  28. VAR
  29.    I:          INTEGER;
  30.    J:          INTEGER;
  31.    L:          INTEGER;
  32.    Ch:         CHAR;
  33.    Quit:       BOOLEAN;
  34.    Bot_Line:   INTEGER;
  35.    Top_Line:   INTEGER;
  36.    Review_Len: INTEGER;
  37.    Redraw:     BOOLEAN;
  38.  
  39. (*----------------------------------------------------------------------*)
  40. (*    Update_Lines_Displayed -- tell which lines currently displayed    *)
  41. (*----------------------------------------------------------------------*)
  42.  
  43. PROCEDURE Update_Lines_Displayed;
  44.  
  45. BEGIN (* Update_Lines_Displayed *)
  46.  
  47.    Window( 1, 1, 80, 25 );
  48.    GoToXY( 67 , 23 );
  49.    WRITE( Top_Line, ' --> ', Bot_Line );
  50.    ClrEol;
  51.    Window( 1, 1, 80, 20 );
  52.  
  53. END   (* Update_Lines_Displayed *);
  54.  
  55. (*----------------------------------------------------------------------*)
  56.  
  57. BEGIN (* Review_Captured_Text *)
  58.                                    (*  Save current screen contents *)
  59.    Save_Screen( Saved_Screen );
  60.                                    (*  Whole screen is window       *)
  61.    Window( 1, 1, 80, 25 );
  62.                                    (*  Clear screen                 *)
  63.    ClrScr;
  64.                                    (*  Draw split-screen bar        *)
  65.    TextColor( Menu_Frame_Color );
  66.  
  67.    GoToXY( 1 , 22 );
  68.  
  69.    FOR I := 1 TO 29 DO
  70.       WRITE('=');
  71.  
  72.    TextColor( Menu_Text_Color );
  73.  
  74.    WRITE(' Review Captured Text ');
  75.  
  76.    TextColor( Menu_Frame_Color );
  77.  
  78.    FOR I := 1 TO 29 DO
  79.       WRITE('=');
  80.                                    (* Display instructions *)
  81.    GoToXY( 1 , 23 );
  82.  
  83.    WRITE('Esc');
  84.    TextColor( Menu_Text_Color );
  85.    WRITE('  to quit');
  86.    GoToXY( 52 , 23 );
  87.    TextColor( Menu_Frame_Color );
  88.    WRITELN('Current lines: ');
  89.  
  90.    WRITE('PgUp/PgDn');
  91.    TextColor( Menu_Text_Color );
  92.    WRITE('  to page         ');
  93.    TextColor( Menu_Frame_Color );
  94.    WRITE('/  ');
  95.    TextColor( Menu_Text_Color );
  96.    WRITELN('to scroll');
  97.  
  98.    TextColor( Menu_Frame_Color );
  99.    WRITE('Home');
  100.    TextColor( Menu_Text_Color );
  101.    WRITE('  first screen         ');
  102.    TextColor( Menu_Frame_Color );
  103.    WRITE('End');
  104.    TextColor( Menu_Text_Color );
  105.    WRITE('  last screen');
  106.  
  107.                                    (* Scrolling window for viewing  *)
  108.    Window( 1, 1, 80, 20 );
  109.                                    (* Not done yet                  *)
  110.    Quit     := FALSE;
  111.                                    (* First page                    *)
  112.    Top_Line := 1;
  113.    Redraw   := TRUE;
  114.                                    (* Text color for display        *)
  115.    TextColor( Menu_Text_Color );
  116.                                    (* Current length of review buf. *)
  117.  
  118.    Review_Len := Review_Head - Review_Tail + 1;
  119.    IF ( Review_Len <= 0 ) THEN Review_Len := Review_Len + Max_Review_Length;
  120.  
  121.                                    (* List buffer contents          *)
  122.    REPEAT
  123.                                    (* Display current page          *)
  124.  
  125.       Bot_Line := MIN( Top_Line + 19 , Review_Len );
  126.       L        := 0;
  127.  
  128.       IF Redraw THEN
  129.          BEGIN
  130.  
  131.             FOR I := Top_Line TO Bot_Line DO
  132.                BEGIN
  133.  
  134.                   L      := L + 1;
  135.  
  136.                   GoToXY( 1 , L );
  137.  
  138.                   J := Review_Tail + I - 1;
  139.  
  140.                   IF ( J > Max_Review_Length ) THEN
  141.                      J := J - Max_Review_Length
  142.                   ELSE IF ( J < 1 ) THEN
  143.                      J := J + Max_Review_Length;
  144.  
  145.                   WRITE ( Review_Buffer^[ J ] );
  146.                   ClrEol;
  147.  
  148.                END;
  149.  
  150.             FOR I := ( L + 1 ) TO 20 DO
  151.                BEGIN
  152.                   GoToXY( 1 , I );
  153.                   ClrEol;
  154.                END;
  155.  
  156.          END;
  157.                                    (* Assume no need to redraw screen *)
  158.       Redraw := FALSE;
  159.                                    (* Indicate which lines displayed  *)
  160.       Update_Lines_Displayed;
  161.                                    (* Read command                  *)
  162.       READ( Kbd , Ch );
  163.  
  164.       IF ( ORD( Ch ) = ESC ) AND ( NOT KeyPressed ) THEN
  165.          Quit := TRUE
  166.       ELSE
  167.          BEGIN
  168.  
  169.             READ( Kbd, Ch );
  170.  
  171.             CASE ORD( Ch ) OF
  172.  
  173.                U_Arrow:  BEGIN (* Up Arrow -- scroll up one line *)
  174.  
  175.                             IF Top_Line > 1 THEN
  176.                                BEGIN
  177.  
  178.                                    (* Make room for new line *)
  179.  
  180.                                   GoToXY( 1 , 1 );
  181.                                   InsLine;
  182.  
  183.                                   Top_Line := Top_Line - 1;
  184.                                   Bot_Line := Bot_Line - 1;
  185.  
  186.                                   J        := Review_Tail + Top_Line - 1;
  187.  
  188.                                   IF ( J > Max_Review_Length ) THEN
  189.                                      J := J - Max_Review_Length
  190.                                   ELSE IF ( J < 1 ) THEN
  191.                                      J := J + Max_Review_Length;
  192.  
  193.                                   WRITE( Review_Buffer^[ J ] );
  194.                                   ClrEol;
  195.  
  196.                                END;
  197.  
  198.                          END   (* Up Arrow *);
  199.  
  200.                D_Arrow:  BEGIN (* Down Arrow -- scroll down one line *)
  201.  
  202.                             IF Bot_Line < Review_Len THEN
  203.                                BEGIN
  204.  
  205.                                    (* Make room for new line *)
  206.  
  207.                                   GoToXY( 1 , 1 );
  208.                                   DelLine;
  209.  
  210.                                   Top_Line := Top_Line + 1;
  211.                                   Bot_Line := Bot_Line + 1;
  212.  
  213.                                   J        := Review_Tail + Bot_Line - 1;
  214.  
  215.                                   IF ( J > Max_Review_Length ) THEN
  216.                                      J := J - Max_Review_Length
  217.                                   ELSE IF ( J < 1 ) THEN
  218.                                      J := J + Max_Review_Length;
  219.  
  220.                                   GoToXY( 1 , Bot_Line - Top_Line + 1 );
  221.                                   WRITE( Review_Buffer^[ J ] );
  222.                                   ClrEol;
  223.  
  224.                                END;
  225.  
  226.                          END   (* Down Arrow *);
  227.  
  228.                PgUp:     BEGIN (* PgUp -- move up one page *)
  229.  
  230.                             IF ( Top_Line > 1 ) THEN
  231.                                BEGIN
  232.                                   Redraw := TRUE;
  233.                                   Top_Line := MAX( Top_Line - 19 , 1 );
  234.                                END;
  235.  
  236.                          END   (* PgUp *);
  237.  
  238.                PgDn:     BEGIN (* PgDn -- move down one page *)
  239.  
  240.                             IF ( Bot_Line + 1 ) < Review_Len THEN
  241.                                BEGIN
  242.                                   Redraw := TRUE;
  243.                                   Top_Line := Bot_Line + 1;
  244.                                END;
  245.  
  246.                          END   (* PgDn *);
  247.  
  248.                Home:     BEGIN (* Home -- move to top of buffer *)
  249.  
  250.                             Top_Line := 1;
  251.                             Redraw   := TRUE;
  252.  
  253.                          END   (* Home *);
  254.  
  255.                End_Key:  BEGIN (* End -- move to end of buffer *)
  256.                             Bot_Line := Review_Len;
  257.                             Top_Line := MAX( Bot_Line - 19 , 1 );
  258.                             Redraw   := TRUE;
  259.                          END   (* End *);
  260.  
  261.                ELSE                (* Sound bell for bad input *)
  262.  
  263.                          WRITE( CHR( BELL ) );
  264.  
  265.             END (* CASE *);
  266.  
  267.          END;
  268.  
  269.    UNTIL Quit;
  270.  
  271.    Restore_Screen( Saved_Screen );
  272.    Reset_Global_Colors;
  273.  
  274. END   (* Review_Captured_Text *);
  275.